package com.flyqiu.common.tools;

import java.util.concurrent.ThreadLocalRandom;

/**
 * ID生成工具类，用于生成指定长度的随机ID。
 */
public class FlyQiuIdTools {

    /**
     * 生成8位长度的ID。
     *
     * @return 8位长度的ID字符串
     */
    public static String createId8() {
        return createId("", 8);
    }

    /**
     * 生成16位长度的ID。
     *
     * @return 16位长度的ID字符串
     */
    public static String createId16() {
        return createId("", 16);
    }

    /**
     * 生成32位长度的ID。
     *
     * @return 32位长度的ID字符串
     */
    public static String createId32() {
        return createId("", 32);
    }

    /**
     * 生成64位长度的ID。
     *
     * @return 64位长度的ID字符串
     */
    public static String create64() {
        return createId("", 64);
    }

    /**
     * 生成128位长度的ID。
     *
     * @return 128位长度的ID字符串
     */
    public static String create128() {
        return createId("", 128);
    }

    /**
     * 根据前缀和指定长度创建一个ID。
     *
     * @param prefix ID的前缀
     * @param digit  ID的总长度
     * @return 生成的ID字符串
     * @throws IllegalArgumentException 如果总长度小于6或前缀长度超过总长度
     */
    public static String createId(String prefix, Integer digit) {
        // 默认长度为6
        if (digit == null) {
            digit = 6;
        }

        // 总长度不能小于6
        if (digit < 6) {
            throw new IllegalArgumentException("生成ID位数不能小于6位");
        }

        // 前缀为空则初始化为空字符串
        if (prefix == null) {
            prefix = "";
        }

        // 计算除去前缀后的长度
        int tempNum = digit - prefix.length();

        // 前缀长度不能超过总长度
        if (tempNum <= 0) {
            throw new IllegalArgumentException("前缀长度超过了指定的总长度");
        }

        // 构建ID字符串
        StringBuilder sb = new StringBuilder(prefix);

        // 生成指定长度的随机数字并添加到字符串构建器中
        while (sb.length() < digit) {
            int num = ThreadLocalRandom.current().nextInt(10);
            sb.append(num);
        }

        // 返回生成的ID
        return sb.toString();
    }
}
